#ifndef JSZ_TRANSLATOR_H
#define JSZ_TRANSLATOR_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

// 最大文件大小限制 (10MB)
#define MAX_FILE_SIZE (10 * 1024 * 1024)  // 10MB
// 最大行长度
#define MAX_LINE_LENGTH 256
// 最大关键字长度
#define MAX_KEYWORD_LENGTH 32
// 最大关键字数量
#define MAX_KEYWORDS 100
// 最大消息长度
#define MAX_MESSAGE_LENGTH 512
// 最大消息数量
#define MAX_MESSAGES 100
// 默认配置文件名（不包含路径）
#define DEFAULT_CONFIG_FILENAME "keywords.conf"
#define DEFAULT_MESSAGE_FILENAME "messages.conf"
// 最大路径长度
#define MAX_PATH_LENGTH 512

// 关键字映射结构体
typedef struct {
    char jsz_keyword[MAX_KEYWORD_LENGTH];    // JSZ中文关键字
    char js_keyword[MAX_KEYWORD_LENGTH];     // JavaScript关键字
} KeywordMapping;

// 消息映射结构体
typedef struct {
    char key[MAX_KEYWORD_LENGTH];
    char message[MAX_MESSAGE_LENGTH];
} MessageMapping;

// 函数声明
char* get_executable_directory(const char* argv0);
char* build_config_file_path(const char* argv0, const char* filename);
bool load_keywords_from_config(const char* config_file);
void free_keywords(void);
bool load_messages_from_config(const char* message_file);
void free_messages(void);
const char* get_message(const char* key);
bool translate_jsz_to_js(const char* input_file, const char* output_file);
char* read_file(const char* filename);
bool write_file(const char* filename, const char* content);
char* translate_content(const char* content);
char* replace_keywords(const char* content);
bool is_keyword_boundary(char c);
bool is_in_string_or_comment(const char* content, int position);
void print_usage(const char* program_name);
void print_version(void);

// 全局变量声明
extern KeywordMapping* keyword_map;
extern int keyword_count;
extern MessageMapping* message_map;
extern int message_count;

#endif // JSZ_TRANSLATOR_H